package edu.nuc.ahm.juc.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/*
* Executors 工具类 三大方法  七大参数
* 使用了线程池之后 使用线程池来创建线程
*
*
*  public ThreadPoolExecutor(int corePoolSize,  核心线程池大小
                              int maximumPoolSize, 最大核心线程池大小
                              long keepAliveTime,  超时了没有调用就会释放
                              TimeUnit unit,   超时单位
                              BlockingQueue<Runnable> workQueue) {  // 阻塞队列
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler); // 线程工厂  ；  拒绝策略
             *
             * 最大线程到底该如何定义
             * 1. CPU 密集型  12核  12条线程同时进行 几核的就定义为几 可以保证CPU 的效率最高
             * 2. IO  密集型   假设： 一个程序3个大型任务 IO十分占用资源
             *     判断你程序中十分耗IO的 线程设置成它的两倍就行
             *
             *
             *
* */
public class Demo1 {
    public static void main(String[] args) {

        int i1 = Runtime.getRuntime().availableProcessors();
        System.out.println(i1);


        ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程
//        ExecutorService threadPool2 = Executors.newFixedThreadPool(5);// 创建一个固定的线程池大小
//        ExecutorService threadPool3 = Executors.newCachedThreadPool();// 可伸缩的
        try {
            for (int i = 0; i < 10; i++) {
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+"ok");
                });
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 线程池用完 程序结束 关闭线程池
            threadPool.shutdown();
        }
    }
}
